<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /*call()和apply()函数对象的方法，需要通过函数对象来调用，当对函数call()和apply()都会调用函数执行，
    * 当调用call()和apply()可以将一个对象指定为第一个参数 此时这个对象将称为函数执行的this
    *   区别：
    *1.call()可以将实参在对象之后依次传递
    *2.apply()需要将实参封装到一个数组中统一传递
    *
    *  this的四种方法：
    *    1.以函数的形式调用时，this就是window
    *   2.以对象的方法调用时，this就是调用方法的对象
    *   3.当函数以构造函数出现时，this就是我们新创建的对象
    *   4.使用call和apply调用时，this就是指定的哪个对象，第一个对象指定的是谁 就是谁 即obj3就是this
    * */
    //举例1
    function fun() {
    alert(this.age);//this是是指obj 实参是谁 this就是谁
    }
    // fun.call();//函数调用第1种方法
    // fun.apply();//函数调用第2种方法
    // fun();//函数调用第3种方法
    var obj={name:"孙悟空",age:28};
    var obj1={name:"孙猴",age:15};
    fun.call(obj);//this是是指obj
    //举例2
    var obj2={
        name:"喜羊羊",
        age:15,
        sayName:function () {
    alert(this.name)//参数是谁，this就是谁 本题是obj3
        }
    };
    var obj3={
        name:"美羊羊",
        age:20
    };
    // obj2.sayName.apply(obj3);//参数是谁，this就是谁 本题是obj3
    function fun2(a,b) {
    console.log("a="+a);
        console.log("b="+b);
    }
    fun2.call(obj3,4,5);// call 是一个一个参数传递的  a=4 b=5 第二个餐厨 即实参
    //使用call和apply调用时，this就是指定的哪个对象，第一个对象指定的是谁 就是谁 即this就是obj3
    fun2.apply(obj3,[8,9]);//apply是封装在数组中传递的 a=8 b=9
</script>
</body>
</html>